package com.springMVCStudy.config;


import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@ComponentScan({"com.springMVCStudy.jsp", "com.springMVCStudy.json"})
@EnableWebMvc
// WebMvcConfigurer能提供springMVC需要的组件的方法，能简化配置springMVC需要的组件，不需要我们自行@Bean进行组件创建
public class MVCConfig implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        // WebMvcConfigurer提供的register能让我们快速添加前后缀
        registry.jsp("/WEB-INF/views", ".jsp");
    }

    // 请求通过dispatcherServlet，dispatcherServlet再找handlerMapping找对应的handler，不会去找静态资源
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        // 开启后，开启静态资源处理。dispatcherServlet -> handlerMapping找有没有对应的handler，没有就找对应静态资源
        /*
        开启后，在org\springframework\spring-webmvc\6.0.6\spring-webmvc-6.0.6.jar!下
        \META-INF\spring.handlers中解析类org.springframework.web.servlet.config.MvcNamespaceHandler
        "default-servlet-handler"对应的DefaultServletHandlerBeanDefinitionParser类的parse方法会生效
        其源码29行有一个静态资源处理器DefaultServletHttpRequestHandler，进去发现handleRequest方法
        方法中通过请求转发到静态资源路径来访问静态资源
         */
        configurer.enable();
    }
}
